/**
 * 
 */
package mainClient;

import interaction.Protocol;
import interaction.ProtocolType;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JViewport;
import javax.swing.SpinnerNumberModel;

/**
 * @author kin
 *
 */
public class GuiClient extends JFrame implements ActionListener 
	{
	
	private static final long serialVersionUID = 1L;
	
	private JButton ButtonConn = new JButton("Подключиться к БД");
	private JButton ButtonDisConn = new JButton("Отключиться от БД");
	private JButton ButtonFind = new JButton("Найти");
	private JComboBox BoxPr = new JComboBox();
	private JTextArea ResFind = new JTextArea();
	private JTextField edit_IP = new JTextField();
	
	private JSpinner edit_Port = new JSpinner(new SpinnerNumberModel(13000,1025,14000,1));
	private JTextField edit_param1 = new JTextField();
	private JTextField edit_param2 = new JTextField();
	private IClient myClient;
	private ClientFactory myFactory = new ClientFactory();
	
	
	public GuiClient() 
	{
		super("Поисковик - клиент");
		
		BorderLayout layout = new BorderLayout();
		setLayout(layout);
	    JPanel panel_param = new JPanel();
	    panel_param.add(new JLabel("IP : "));
	    panel_param.add(edit_IP);
	    edit_IP.setText("127.0.0.1");
	    panel_param.add(new JLabel("  Порт сервера : "));
	    panel_param.add(edit_Port);
	    
	    
	    for(Protocol prot: Protocol.m_protocols)
	        BoxPr.addItem(prot.m_name);
	    panel_param.add(new JLabel("  Протокол подключения: "));
	    panel_param.add(BoxPr);
	    
	    
	    JPanel panel_button = new JPanel();
	    panel_button.add(ButtonConn);
	    panel_button.add(ButtonDisConn);
	    panel_button.add(ButtonFind);
	    ButtonDisConn.setVisible(false);
	    ButtonFind.setEnabled(false);
	    
	    JPanel panel_find = new JPanel();
	    panel_find.add(new JLabel("Параметр поиска : "));
	    panel_find.add(edit_param1);
	    edit_param1.setText("введите параметр поиска");
	    panel_find.add(new JLabel("Параметр поиска 2: "));
	    panel_find.add(edit_param2);
	    edit_param2.setText("введите параметр поиска");
	    
	    
	    JScrollPane scrollP = new JScrollPane();
	    JViewport viewRes = new JViewport();
	    viewRes.add(ResFind);
	    scrollP.setViewport(viewRes);
	    viewRes.setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
	    
	    JPanel gridPanel = new JPanel();
	    gridPanel.setLayout(new GridLayout(1,2));
	    gridPanel.add(panel_find);
	    gridPanel.add(scrollP);
	    
	    add(panel_param, BorderLayout.NORTH);
	    add(gridPanel, BorderLayout.CENTER);
	    add(panel_button, BorderLayout.SOUTH);
	    	    
	    setSize(800,480);
	    setResizable(false);
	    
	    ButtonConn.setActionCommand("connect");
	    ButtonConn.addActionListener(this);
	    ButtonDisConn.setActionCommand("disconnect");
	    ButtonDisConn.addActionListener(this);
	    ButtonFind.setActionCommand("find");
	    ButtonFind.addActionListener(this);
	    
	}
	

	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		GuiClient clientwindow = new GuiClient();
		clientwindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		clientwindow.setVisible(true);
	}

	
	public void actionPerformed(ActionEvent command) 
	  {
		String str = command.getActionCommand();
	    
	    if(str.equalsIgnoreCase("connect"))
	      {
	    	System.out.println("Подключение к серверу");
	    	ProtocolType type = Protocol.m_protocolMap.get(BoxPr.getSelectedItem()).m_protocol;
	        int port = ((Integer)(edit_Port.getValue())).intValue();
	        int selfPort = 13500;
	        String ip = edit_IP.getText();
	        
	        System.out.println("Подключение к серверу...");	        
	        myClient = myFactory.makeClient(type, port, selfPort, ip);	        
	        
	        if(myClient != null)
	        {
	          boolean result = myClient.connect();
	          
	          if(result == true)
	          {
	            ButtonConn.setVisible(false);
	            ButtonDisConn.setVisible(true);
	            ButtonFind.setEnabled(true);
	            
	            System.out.println("Подключение завершено");
	          }
	          else
	            System.out.println("Невозможно подключиться к серверу");
	        }
	        else
	          System.out.println("Невозможно подключиться к серверу");   
	      
	      }
	    else if(str.equalsIgnoreCase("disconnect"))
	    {
	    	System.out.println("Отключение от сервера");
	    	
	    	boolean result = myClient.disconnect();
	        
	        if(result == true)
	        {
	        	ButtonConn.setVisible(true);
	            ButtonDisConn.setVisible(false);
	            ButtonFind.setEnabled(false);
	        	System.out.println("Сервер покинут");
	        }
	        else
	          System.out.println("Невозможно отключиться от сервера");   
	    }
	    else if(str.equalsIgnoreCase("find"))
	    {
	    	System.out.println("Отправка запроса серверу");
	    	String str1  = myClient.SendBDR();
	    	ResFind.append(str1+"\n");
	    }
	  }

}
